iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 26
0
Big Data

體育競賽及日常生活裏遇到的數據收集及分析系列 第 26

體育競賽資料收集器:應用CV電腦視覺之三

  • 分享至 

  • xImage
  •  

自由軟體的世界有時候變化得很快,昨天的情況就是個例子,opencv 2.4.4可以支援,但2.4.9之後就不太支援了。可惜了一個好工具。而opencv 現在已出到3.x, 筆者自編譯的opencv也到3.1.x了。所以看看官網怎麼說?

以這篇初入門來說,提到一個重點,Numpy很重要。

And the support of Numpy makes the task more easier. Numpy is a
highly optimized library for numerical operations. It gives a MATLAB-style syntax.

第二篇,設定環境, 提到,兩個重點,一是編譯opencv,二是裝套件,除了上篇入門的Numpy之外,還有**Matplotlib **,這是可選的項目。
cmake的圖形設定工具,也講的很詳細。

第三篇是在linux上設定環境,以fedora發行版為例,筆者近十年沒用了,不太會用,可參考,除了裝套件指令不同外 ,還是從源始碼編譯opencv。

其實cmake在linux上仍然有gui設定介面。這裏沒示範。

再來,終於可以寫點code了,

是opencv框架裏的Gui 輔助,
5個範例,第一個例子,用opencv來實作圖面的讀入cv2.imread,秀出來cv2.imshow,寫到另一個檔cv2.imwrite
算是一個無痛的入門。

筆者用比較古早的*ipython notebook * 做為開發環境,如下圖 ,
自訂一個目錄夾
自訂一個目錄夾,把圖片放進去,就可測試了。

這範例會用灰階秀圖,cv2.imread('lom.jpg',0), 第二個參數0有影響,按ESC鍵是結束,按S鍵會另存新檔。

 from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

如果沒有裝matplotlib,就死給你看。

 ---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-4-947d4509aa91> in <module>()
----> 1 from matplotlib import pyplot as plt
      2 
      3 img = cv2.imread('messi5.jpg',0)
      4 plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
      5 plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis

ImportError: No module named matplotlib

在UBUNTU下,可用Synaptic 搜尋此套件安裝,裝完,重新 ipython notebook, 看 matplotlib的效果

matplotlib的效果

第二個範例是從筆電的攝影機,或影片檔讀入影像(video)。比較特別的是影片的規格,叫fourcc。 opencv 還是要具備一般影像處理能力。

不用裝DRIVER,自動會抓到。筆電沒有攝像頭,就麻煩了。還好不是光碟機。

nb上的CAM

筆者的筆電比較LOW,等了一下才出現。按Q 離開程式。

放一段影片,轉自YOUTUBE,先試一下MP4格式,

cap = cv2.VideoCapture('tai.mp4')

會呈現快進的效果,然後當掉,IPYTHON 自動重啟。

訊息為,

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-2-790149e65123> in <module>()
      7     ret, frame = cap.read()
      8 
----> 9     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
     10 
     11     cv2.imshow('frame',gray)

error: /home/timloo/mvn-java-web/opencv/modules/imgproc/src/color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cvtColor

下載成AVI格式,仍然是當掉。

cap = cv2.VideoCapture('tai.avi')

不要灰階模式,換一下HSV模式,
![hsv]

還是當掉,但是訊息不太一樣。

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-1-45180fe35f9d> in <module>()
      8 
      9     #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
---> 10     hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
     11     #cv2.imshow('frame',gray)
     12     cv2.imshow('frame',hsv)

error: /home/timloo/mvn-java-web/opencv/modules/imgproc/src/color.cpp:9815: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor

希望之後對影像處理更深入理解後,可以解此問題。

下一個子範例,會把影像上下翻轉後,另存新檔,但不做灰階,或HSV處理。

frame = cv2.flip(frame,0)

這行是上下翻轉,把它註解(#)掉後,

影像就正常了。

把此範例另存的AVI檔,餵給上個範例,仍然會當掉。3年前的教學,在現在還是有一些修正。

第三範例,是把opencv當小畫家使用,在圖片上 **畫線cv2.line(),畫圓 cv2.circle() , 畫畫方cv2.rectangle(), 畫蛋cv2.ellipse(), 寫字cv2.putText() **。

當照著範例KEY IN 後,按執行並不會秀出圖,因為沒有相對應的程式碼,請補上

cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()

[第四例](https://opencv-python-tutroals.readthedocs.io/en/l atest/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html),把滑鼠當畫筆來刷刷刷,

第五例,是進階的ui 控制,可以拖拉bar來改變數值。模擬調色盤的效果。

接下來是
核心操作篇,下面分4小節,
第一例是:圖片基本操作,裏面示範了,1。讀取/更新像素值。2讀取圖片屬性。3讀取圖片部分
region of images(ROI)。4. 分離和合併顏色通道(Channels)。5為圖片加上框。

第二例是:圖片的四則運算。兩張圖片的加法。位元級的四則運算,Bitwise Operations,不是加減乘除,是AND, OR, NOT and XOR 。

第三例是:

… 以下自行測試。應該會有些異常的結果,畢竟這是三年級的入門。可以試著回應給作者更新。

IPython 是一個強大且方便的工具,它的未來版本Jupyter更加強大 ,可惜在UBUNTU的套件庫裏沒找到,
已經有網友分享,有免費的雲端版試用,不用裝在本機。

目前在播放影片時,做些顏色強化,有異常發生。


上一篇
體育競賽資料收集器:應用CV電腦視覺之二
下一篇
體育競賽資料收集器:應用CV電腦視覺之四
系列文
體育競賽及日常生活裏遇到的數據收集及分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言